package com.xudow.app.util;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

/**
 * 日期格式转换工具类
 *
 * @author LUKECHENG
 */
public class DateUtil {

    /**
     * 日期格式，年份，例如：2004，2008
     */
    public static final String DATE_FORMAT_YYYY = "yyyy";

    /**
     * 日期格式，年份和月份，例如：200707，200808
     */
    public static final String DATE_FORMAT_YYYYMM = "yyyyMM";

    /**
     * 日期格式，年月日，例如：20050630，20080808
     */
    public static final String DATE_FORMAT_YYYYMMDD = "yyyyMMdd";

    /**
     * 日期格式，年月日，用横杠分开，例如：2006-12-25，2008-08-08
     */
    public static final String DATE_FORMAT_YYYY_MM_DD = "yyyy-MM-dd";

    /**
     * 日期格式，年月日时分秒，例如：20001230120000，20080808200808
     */
    public static final String DATE_TIME_FORMAT_YYYYMMDDHHMISS = "yyyyMMddHHmmss";

    /**
     * 日期格式，年月日时分秒，例如：20001230120000，20080808200808 例如：2005-05-10
     * 23：20：00，2008-08-08 20:08:08
     */
    public static final String DATE_TIME_FORMAT_YYYY_MM_DD_HH_MI_SS = "yyyy-MM-dd HH:mm:ss";

    /**
     * 日期格式，年月日时分
     * 2008-08-08 20:08
     */
    public static final String DATE_TIME_FORMAT_YYYY_MM_DD_HH_MI = "yyyy-MM-dd HH:mm";
    public static final String DATE_TIME_FORMAT_YYYY_MM_DD="yyyy-MM-dd";
    /**
     * @param strDate：日期的字符串形式
     * @param format：转换格式
     * @return String
     * @throws ParseException 字符串转换为日期
     * @throws
     */
    public static Date strToDate(String strDate, String format) {
        SimpleDateFormat dateFormat = new SimpleDateFormat(format);
        Date date = null;

        try {
            date = dateFormat.parse(strDate);
        } catch (ParseException e) {
            e.printStackTrace();
        }

        return date;
    }

    /**
     * 字符串转换为日期时间
     *
     * @param strDateTime：日期时间的字符串形式
     * @param format                 转换格式
     * @return String
     * @throws
     */
    public static Date strToDateTime(String strDateTime, String format) {
        SimpleDateFormat dateTimeFormat = new SimpleDateFormat(format);
        Date dateTime = null;
        try {
            dateTime = dateTimeFormat.parse(strDateTime);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return dateTime;
    }

    /**
     * 日期转换为字符串
     *
     * @param date：需要转换的日期
     * @param format：转换格式
     * @return String
     * @throws
     */
    public static String dateToStr(Date date, String format) {
        SimpleDateFormat dateFormat = new SimpleDateFormat(format);
        return dateFormat.format(date);
    }

    /**
     * 日期时间转换为字符串
     *
     * @param date：需要转换的日期
     * @param format：转换格式
     * @return String
     * @throws
     */
    public static String dateTimeToStr(Date date, String format) {
        SimpleDateFormat dateTimeFormat = new SimpleDateFormat(format);
        return dateTimeFormat.format(date);
    }
    
    
    /**
     * 功能：获取本周的开始时间
     * 示例：2013-05-13 00:00:00
     */   
    public static Date getWeekStart() {// 当周开始时间
        Calendar currentDate = Calendar.getInstance();
        currentDate.setFirstDayOfWeek(Calendar.MONDAY);
        currentDate.set(Calendar.HOUR_OF_DAY, 0);
        currentDate.set(Calendar.MINUTE, 0);
        currentDate.set(Calendar.SECOND, 0);
        currentDate.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
        return (Date) currentDate.getTime();
    }
    
    /**
     * 功能：获取本周的结束时间
     * 示例：2013-05-19 23:59:59
     */   
    public static Date getWeekEnd() {// 当周结束时间
        Calendar currentDate = Calendar.getInstance();
        currentDate.setFirstDayOfWeek(Calendar.MONDAY);
        currentDate.set(Calendar.HOUR_OF_DAY, 23);
        currentDate.set(Calendar.MINUTE, 59);
        currentDate.set(Calendar.SECOND, 59);
        currentDate.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
        return (Date) currentDate.getTime();
    }

    
    /**   
     * 得到本月的第一天   
     * @return   
     */    
    public static Date getMonthFirstDay() {     
        Calendar calendar = Calendar.getInstance();     
        calendar.set(Calendar.DAY_OF_MONTH, calendar     
                .getActualMinimum(Calendar.DAY_OF_MONTH));     
        
        return calendar.getTime();     
    }  
    
    /**   
     * 得到本月的最后一天   
     *    
     * @return   
     */    
    public static Date getMonthLastDay() {     
        Calendar calendar = Calendar.getInstance();     
        calendar.set(Calendar.DAY_OF_MONTH, calendar     
                .getActualMaximum(Calendar.DAY_OF_MONTH));     
        return calendar.getTime();     
    }     
    
    
}